package org.mbcorp.sar.controller;

import java.security.Principal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import org.mbcorp.sar.model.Medalla;
import org.mbcorp.sar.model.Operador;
import org.mbcorp.sar.service.OperadorService;
import org.mbcorp.sar.service.PuntajeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.MessageSource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@PreAuthorize(value = "hasRole('ROLE_OPERADOR')")
@Controller
public class ConsultaOperadoresController {

	@Autowired
	private MessageSource messageSource;
	
	@Autowired
	private OperadorService operadorService;
	
	@Autowired
	private PuntajeService puntajeService;
//	
	@InitBinder
	public void initDateBinder(final WebDataBinder dataBinder, final Locale locale) {
	    final String dateformat = this.messageSource.getMessage("date.format", null, locale);
	    final SimpleDateFormat sdf = new SimpleDateFormat(dateformat);
	    sdf.setLenient(false);
	    dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, false));
	}

	@RequestMapping(value = "/consultaOperadores", method = RequestMethod.GET)
	public String getConsultaOperadores(Model model, Principal currentUser) {
		List<Medalla> medallas = puntajeService.buscarTodasMedallas();		
		List<Operador> listaOperadores = operadorService.buscarTodosPorPuntos();
//		for(Operador o : listaOperadores){
//			operadorService.agregarMedallasObtenidas(o, medallas);
//		}
		Operador operador = operadorService.buscarPorLogin(currentUser.getName()).get(0);		
//		operadorService.agregarMedallasObtenidas(operador, medallas);
		model.addAttribute("operadores", listaOperadores);
		model.addAttribute("operador", operador);
		return "consultaOperadores";
	}
	
	@ModelAttribute("allMedallas")
	public List<Medalla> llenarMedallas() {
	    return puntajeService.buscarTodasMedallas();
	}
	
//	@RequestMapping(value = "/tieneMedalla/{idMedalla}/{idOperador}", method = RequestMethod.GET)
//	public @ResponseBody boolean tieneMedalla(@PathVariable("idMedalla") Integer idMedalla, @PathVariable("idOperador") Integer idOperador) {
//	    Operador o = operadorService.buscarPorId(idOperador);
//	    Medalla m = puntajeService.buscarMedallaPorId(idMedalla);
//	    for(Logro a : o.getLogros()){
//	    	if(a.getMedalla().getId() == m.getId() && a.getFechaObtencion() != null){
//	    		return true;
//	    	}
//	    }
//	    return false;
//	}
}
